export function datetimeFormat(time, cFormat) {
    if (arguments.length === 0) {
        return null
    }
    let fmt = cFormat || 'yyyy-MM-dd hh:mm:ss'
    const date = typeof time === 'object' ? time : new Date(time)

    var o = {
        'M+': date.getMonth() + 1, // 月份
        'd+': date.getDate(), // 日
        'h+': date.getHours(), // 小时
        'm+': date.getMinutes(), // 分
        's+': date.getSeconds(), // 秒
        'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
        S: date.getMilliseconds() // 毫秒
    }
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(
            RegExp.$1,
            (date.getFullYear() + '').substr(4 - RegExp.$1.length)
        )
    }
    for (var k in o) {
        if (new RegExp('(' + k + ')').test(fmt)) {
            fmt = fmt.replace(
                RegExp.$1,
                RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
            )
        }
    }
    return fmt
}

import dayjs from 'dayjs'

// 时间戳格式化
export function formatDate(value, format = 'YYYY-MM-DD') {
    if (!value && value !== 0) return ''
    if (!dayjs(value).isValid()) return value
    return dayjs(value).format(format)
}

/* 获取当前时间往前一年 */
export function datetimeFront(time, cFormat) {
    if (arguments.length === 0) {
        return null
    }
    let fmt = cFormat || 'yyyy-MM-dd hh:mm:ss'
    const date = typeof time === 'object' ? time : new Date(time)

    var o = {
        'M+': date.getMonth() + 1, // 月份
        'd+': date.getDate(), // 日
        'h+': date.getHours(), // 小时
        'm+': date.getMinutes(), // 分
        's+': date.getSeconds(), // 秒
        'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
        S: date.getMilliseconds() // 毫秒
    }
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(
            RegExp.$1,
            (date.getFullYear() - 1 + '').substr(4 - RegExp.$1.length)
        )
    }
    for (var k in o) {
        if (new RegExp('(' + k + ')').test(fmt)) {
            fmt = fmt.replace(
                RegExp.$1,
                RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
            )
        }
    }
    return fmt
}

/**
 * 获取某天的日期
 * const yesterday = getDay(-1, '/')  // IE 不支持 new Date()中使用横杠
 * @param {*} num
 * @param {*} str
 * @returns
 */
export function getDay(num = 0, str = '/') {
    const today = new Date()
    const nowTime = today.getTime()
    const ms = 24 * 3600 * 1000 * num
    today.setTime(parseInt(nowTime + ms))
    const oYear = today.getFullYear()

    let oMoth = (today.getMonth() + 1).toString()
    if (oMoth.length <= 1) {
        oMoth = '0' + oMoth
    }

    let oDay = today.getDate().toString()
    if (oDay.length <= 1) {
        oDay = '0' + oDay
    }

    return oYear + str + oMoth + str + oDay
}

/**
 * 获取某月的第一天
 * const yesterday = getDay(-1, '/')  // IE 不支持 new Date()中使用横杠
 * @param {*} num
 * @param {*} str
 * @returns
 */
export function monthFirstDay(yearMonth = '2020-01') {
    // 未传年月，默认返回当年月
    if (!yearMonth) {
        const now = new Date()
        yearMonth = datetimeFormat(
            `${now.getFullYear()}-${now.getMonth() + 1}`,
            'yyyy-MM'
        )
    }

    return datetimeFormat(`${yearMonth}-01`, 'yyyy-MM-dd')
}

/**
 * 获取某月的最后一天
 * const yesterday = getDay(-1, '/')  // IE 不支持 new Date()中使用横杠
 * @param {*} num
 * @param {*} str
 * @returns
 */
export function monthLastDay(yearMonth = '2020-01') {
    // 如果是本月，返回当前日期
    const now = new Date()
    const monthTodayDefault = datetimeFormat(
        `${now.getFullYear()}-${now.getMonth() + 1}`,
        'yyyy-MM'
    )
    if (yearMonth === monthTodayDefault) {
        return datetimeFormat(`${yearMonth}-${now.getDate()}`, 'yyyy-MM-dd')
    }

    let year = yearMonth.split('-')[0]
    let month = yearMonth.split('-')[1]
    let lastDay = new Date(new Date(year, month).getTime() - 24 * 60 * 60 * 1000)
    return datetimeFormat(`${yearMonth}-${lastDay.getDate()}`, 'yyyy-MM-dd')
}

export function intervalTime(autoTime) {
    //var autoTime='2022-05-05 21:58:59'   //尽量让服务端传时间戳，能够有效避免时区问题
    var date1 = (Date.parse(new Date())); //计算当前时间戳 
    var date2 = autoTime;
    ; //自动收货的时间戳 （字符串转时间戳）
    var date3 = (date1 - date2); //时间差的毫秒数
    //计算出相差天数
    var days = Math.floor(date3 / (24 * 3600 * 1000));
    //计算出小时数
    var leave1 = date3 % (24 * 3600 * 1000); //计算天数后剩余的毫秒数
    var hours = Math.floor(leave1 / (3600 * 1000));
    //计算相差分钟数
    var leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数
    var minutes = Math.floor(leave2 / (60 * 1000));
    //计算相差秒数
    var leave3 = leave2 % (60 * 1000); //计算分钟数后剩余的毫秒数
    var seconds = Math.round(leave3 / 1000);
    if (hours < 10) {
        hours = '0' + hours
    }
    if (minutes < 10) {
        minutes = '0' + minutes
    }
    if (seconds < 10) {
        seconds = '0' + seconds
    }
    return hours + ":" + minutes + ":" + seconds
}

/**
 * 获取当前时间往前五年时间戳
 * @param {*} num
 * @param {*} str
 * @returns
 */
export function getTime(time, number) {
    const date = typeof time === 'object' ? time : new Date(time)
    let times = datetimeFormat(date)
    let times1 = Number(datetimeFormat(new Date(), 'yyyy'))
    let times2 = times1 - number
    let times4 = times?.substring(4, times?.length)
    let times5 = times2 + times4
    times5 = times5.replace(/-/g, '/')
    let times6 = new Date(times5).getTime();
    return times6
}

export default {
    datetimeFormat,
    datetimeFront,
    monthLastDay,
    monthFirstDay,
    getDay,
    intervalTime,
    getTime
}